/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.nys.conci.citas.bean;

import com.nys.conci.base.BeanBase;
import com.nys.conci.base.excepcion.ExcepcionManager;
import com.nys.conci.base.utilitario.MensajeUtil;
import com.nys.conci.citas.entidad.ControlCita;
import com.nys.conci.citas.servicio.ServicioControlCitas;
import com.nys.conci.cliente.entidad.Persona;
import com.nys.conci.usuario.servicio.ServicioControlUsuario;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.inject.Inject;
import javax.persistence.Temporal;
import org.primefaces.model.DefaultScheduleEvent;
import org.primefaces.model.DefaultScheduleModel;
import org.primefaces.model.ScheduleEvent;
import org.primefaces.model.ScheduleModel;

/**
 *
 * @author Yeudy10
 * @Since 23/02/2013
 */
@ManagedBean
@ViewScoped
public class BeanCitasAsignadas extends BeanBase {

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<*******************<<<<<<<<<<<<<<<<<<<<<<<<<<<<
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<     VARIABLES     >>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<*******************<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    @Inject
    private ServicioControlUsuario scu;
    @Inject
    private ServicioControlCitas scc;
    private List<Persona> listado_persona_usuario;
    private Persona persona_usuario_tabla;
    private Persona persona_usuario_select;
    private String identificacion;
    private String nombre;
    private boolean habilitar;
    private ScheduleModel eventModel;
    private ScheduleEvent event = new DefaultScheduleEvent();
    @Temporal(javax.persistence.TemporalType.TIMESTAMP)
    private Date fecha_inicio;
    @Temporal(javax.persistence.TemporalType.TIMESTAMP)
    private Date fecha_fin;

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<*******************<<<<<<<<<<<<<<<<<<<<<<<<<<<<
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<  INICIALIZARORES  >>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<*******************<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    /**
     * Constructor
     */
    public BeanCitasAsignadas() {
        this.inicializar();
    }

    /**
     * Inicializa las variables del bean, al acceder al constructor
     */
    private void inicializar() {
        try {
            setHabilitar(false);
            setEventModel(new DefaultScheduleModel());
        } catch (Exception ex) {
            ExcepcionManager.manejarExcepcion(ex);
        }
    }

    /**
     * Inicializas las variables y atributos del bean, despues del llamado del
     * constructor. Es utilizado para las inicializaciones que utilicen datos de
     * objetos injectados.
     */
    @Override
    @PostConstruct
    public void inicializarPost() {

        cargarUsuarios();

    }

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<*******************<<<<<<<<<<<<<<<<<<<<<<<<<<<<
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<      MÉTODOS      >>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<*******************<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
    public void cargarUsuarios() {
        try {
            setListado_persona_usuario(new ArrayList<Persona>());
            setListado_persona_usuario(scu.consultarPersonas("U"));
        } catch (Exception ex) {
            ExcepcionManager.manejarExcepcion(ex);
        }
    }

    /**
     * inicializa las citas q ya estan definidas en la bd
     */
    public void cargarCitasCalendario() {

        eventModel=new DefaultScheduleModel();
        List<ControlCita> lista_citas = new ArrayList<ControlCita>();
        lista_citas = scc.consultaListaCitasUsuario(identificacion);
        if (lista_citas == null || lista_citas.isEmpty()) {
            String mensaje = "El usuario no tiene citas asignadas";
            MensajeUtil.agregarMensajeAdvertencia(mensaje);
        } else {
        
        for (ControlCita cita : lista_citas) {
            Persona per = scu.consultarPersona(cita.getIdentificacion_c());
            String nombre = "";
            nombre = per.getNombre() + " " + per.getApellido1() + " " + per.getApellido2();
            int minuto = cita.getHora().getMinutes();
            int segundo = cita.getHora().getSeconds();
            int hora = cita.getHora().getHours();
            fecha_inicio = new Date();
            fecha_inicio.setMinutes(minuto);
            fecha_inicio.setSeconds(segundo);
            fecha_inicio.setHours(hora);
            fecha_inicio.setDate(cita.getFechareal().getDate());
            fecha_inicio.setMonth(cita.getFechareal().getMonth());
            fecha_inicio.setYear(cita.getFechareal().getYear());
            fecha_fin = fecha_inicio;

            event = new DefaultScheduleEvent(nombre, fecha_inicio, fecha_fin);
            eventModel.addEvent(event);
        }
        }
    }

    public void seleccionarUsuario() {
        try {
            persona_usuario_select = persona_usuario_tabla;
            identificacion = persona_usuario_select.getIdentificacion();
            nombre = persona_usuario_select.getNombre() + " " + persona_usuario_select.getApellido1() + " " + persona_usuario_select.getApellido2();
            habilitar = true;
            cargarCitasCalendario();
        } catch (Exception ex) {
            ExcepcionManager.manejarExcepcion(ex);
        }
    }

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<*******************<<<<<<<<<<<<<<<<<<<<<<<<<<<<
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<      GET & SET      >>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<*******************<<<<<<<<<<<<<<<<<<<<<<<<<<<< 
    /**
     * @return the listado_persona_usuario
     */
    public List<Persona> getListado_persona_usuario() {
        return listado_persona_usuario;
    }

    /**
     * @param listado_persona_usuario the listado_persona_usuario to set
     */
    public void setListado_persona_usuario(List<Persona> listado_persona_usuario) {
        this.listado_persona_usuario = listado_persona_usuario;
    }

    /**
     * @return the persona_usuario_tabla
     */
    public Persona getPersona_usuario_tabla() {
        return persona_usuario_tabla;
    }

    /**
     * @param persona_usuario_tabla the persona_usuario_tabla to set
     */
    public void setPersona_usuario_tabla(Persona persona_usuario_tabla) {
        this.persona_usuario_tabla = persona_usuario_tabla;
    }

    /**
     * @return the persona_usuario_select
     */
    public Persona getPersona_usuario_select() {
        return persona_usuario_select;
    }

    /**
     * @param persona_usuario_select the persona_usuario_select to set
     */
    public void setPersona_usuario_select(Persona persona_usuario_select) {
        this.persona_usuario_select = persona_usuario_select;
    }

    /**
     * @return the identificacion
     */
    public String getIdentificacion() {
        return identificacion;
    }

    /**
     * @param identificacion the identificacion to set
     */
    public void setIdentificacion(String identificacion) {
        this.identificacion = identificacion;
    }

    /**
     * @return the nombre
     */
    public String getNombre() {
        return nombre;
    }

    /**
     * @param nombre the nombre to set
     */
    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    /**
     * @return the habilitar
     */
    public boolean isHabilitar() {
        return habilitar;
    }

    /**
     * @param habilitar the habilitar to set
     */
    public void setHabilitar(boolean habilitar) {
        this.habilitar = habilitar;
    }

    /**
     * @return the eventModel
     */
    public ScheduleModel getEventModel() {
        return eventModel;
    }

    /**
     * @param eventModel the eventModel to set
     */
    public void setEventModel(ScheduleModel eventModel) {
        this.eventModel = eventModel;
    }

    /**
     * @return the event
     */
    public ScheduleEvent getEvent() {
        return event;
    }

    /**
     * @param event the event to set
     */
    public void setEvent(ScheduleEvent event) {
        this.event = event;
    }

    /**
     * @return the fecha_inicio
     */
    public Date getFecha_inicio() {
        return fecha_inicio;
    }

    /**
     * @param fecha_inicio the fecha_inicio to set
     */
    public void setFecha_inicio(Date fecha_inicio) {
        this.fecha_inicio = fecha_inicio;
    }

    /**
     * @return the fecha_fin
     */
    public Date getFecha_fin() {
        return fecha_fin;
    }

    /**
     * @param fecha_fin the fecha_fin to set
     */
    public void setFecha_fin(Date fecha_fin) {
        this.fecha_fin = fecha_fin;
    }
}
